package router

import (
	"CampusCloudAid/controller"
	_ "CampusCloudAid/docs"
	"CampusCloudAid/logger"
	middleware "CampusCloudAid/middlewares"
	"net/http"

	"github.com/gin-gonic/gin"
	swaggerFiles "github.com/swaggo/files"
	ginSwagger "github.com/swaggo/gin-swagger"
)

func SetupRouter(mode string) *gin.Engine {
	if mode == gin.ReleaseMode {
		gin.SetMode(gin.ReleaseMode) // gin设置成发布模式
	}
	r := gin.New()
	r.Use(logger.GinLogger(), logger.GinRecovery(true)) //自定义中间件

	r.Static("/resource", "./resource")
	//r.Static("/resource/image/task", "./resource/image/task")
	//r.Static("/resource/image", "./resource/image")
	// 跨域设置
	//config := cors.DefaultConfig()
	//config.AllowOrigins = []string{"*"}                                                         // 允许所有来源的请求，您也可以指定特定的来源
	//config.AllowMethods = []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"}                   // 允许的 HTTP 方法
	//config.AllowHeaders = []string{"Origin", "Content-Length", "Content-Type", "Authorization"} // 允许的请求头
	//r.Use(cors.New(config))

	r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
	v1 := r.Group("/api/v1")
	//登录注册业务
	{
		v1.GET("/captcha", controller.Captcha)
		v1.POST("/login", controller.Login)
		v1.POST("/register", controller.Register)
	}
	v1.GET("/image", func(c *gin.Context) {

	})

	v1.Use(middleware.AuthMiddleware()) // 应用JWT认证中间件，可判断用户token中的账号密码；
	// （与jwt相关的业务需要使用中间键包含）
	{
		v1.GET("/ping", func(context *gin.Context) { // 测试方法，测试jwt是否生效，不写入swagger，只用于api测试
			context.String(http.StatusOK, "pong")
		})
	}
	//用户相关接口
	{
		v1.GET("/user", controller.GetUserInfo)                 //查看用户信息
		v1.POST("/user", controller.UpdateUserInfo)             //修改个人信息
		v1.POST("/user/avatar", controller.UpdateUserAvatar)    //修改个人头像
		v1.GET("/tasks/received", controller.GetReceivedOrders) //查看用户自己接受到的单子
		v1.GET("/tasks/created", controller.GetCreatedTasks)    //查看用户发起的任务
	}
	//任务相关接口
	//任务路由
	{
		v1.GET("/getAllTasks", controller.GetAllTasks)                      //  获取所有任务
		v1.POST("/getTasksByConditional", controller.GetTasksByConditional) //  按条件查询任务接口
		v1.POST("/getTaskInfo", controller.GetTaskInfo)                     //  查询任务详情
		v1.POST("/receiveTask", controller.ReceiveTask)                     //接收任务
		v1.POST("/submitVoucherTask", controller.SubmitVoucherTask)         //提交凭证变成已提交待确认接口
		v1.POST("/getReceivePhone", controller.GetReceivePhone)             //查询接收人手机号
		v1.POST("/getPublishPhone", controller.GetPublishPhone)             //查询发起人手机号
		v1.GET("/getPublishedTasks", controller.GetPublishedTasks)          //查询所有已发布可申领任务接口；
		v1.GET("/getReceivedTasks", controller.GetReceivedTasks)            //查询所有已接收的任务接口
		v1.POST("/getTasksFinish", controller.GetTasksFinish)               // 更改任务状态为已完成                                       //修改用户状态为已完成
		v1.POST("/getTasksDown", controller.GetTasksDown)                   //更改任务状态为下架；
		//v1.POST("/upload", controller.UploadCompletionImages)               //上传凭证图片；
		v1.POST("/task/imageAndSuccess", controller.ImageAndSuccess) //上传凭证图片；
		// 以及提交改变状态；
		v1.GET("/test1", controller.Test1)
	}
	{
		//v1.GET("/Recharge", controller.Recharge)
		v1.GET("/findMoney", controller.FindMoney)
		//v1.GET("/GiftCard", controller.GiftCard) // OK哈哈哈
		//充值业务
	}
	{ //充值接口开发；
		v1.POST("/Recharge/create-and-send-order", controller.CreateAndSendOrder) //创建本地订单并向微信发送订单接收二维码；
		//回调
		r.POST("/wx/pay1", controller.HandleWeChatPayNotification) //回调判断
	}
	{
		v1.POST("/publishTask", controller.PublishTask) //发布任务
		//接收任务
		//v1.POST("/receiveTasks", controller.ReceiveTasks)
		v1.POST("/publishWorkOrders", controller.PublishWorkOrders)   //发起工单
		r.POST("/api/v1/ModifyWorkOrder", controller.ModifyWorkOrder) //修改工单状态；
	}

	return r
}
